
***************************************
*          @@  FLEX 3 @@              *                  
*                                     *
*   ------ >> Chapitre 13 << ------   *
*                                     *
***************************************




--
-- SCHMA DE LA BASE DE DONNES db_configurateur
--
CREATE DATABASE IF NOT EXISTS db_configurateur;
USE db_configurateur;

--
-- CRATION DE LA TABLE tb_categorie
--
CREATE TABLE `tb_categorie` (
  `idCategorie` int(10) unsigned NOT NULL auto_increment,
  `nomCategorie` varchar(45) NOT NULL default '',
  PRIMARY KEY (`idCategorie`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- INSERTION DE DONNES DE DANS LA TABLE tb_categorie
--
INSERT INTO `tb_categorie` (`idCategorie`,`nomCategorie`) VALUES
 (1,'Disques durs'),
 (2,'Mmoires'),
 (3,'Cartes graphiques'),
 (4,'Processeurs'),
 (5,'Cartes mres'),
 (6,'Graveurs & Lecteurs'),
 (7,'Botiers & Alimentations');

--
-- CRATION DE LA TABLE tb_composant lie  la table tb_categorie par le biais de la cl trangre fkCategorie
--
CREATE TABLE `tb_composant` (
  `idComposant` int(10) unsigned NOT NULL auto_increment,
  `nomComposant` varchar(45) NOT NULL default '',
  `prixComposant` float NOT NULL default '0',
  `fkCategorie` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY (`idComposant`),
  KEY `FK_tb_composant` (`fkCategorie`),
  CONSTRAINT `FK_tb_composant` FOREIGN KEY (`fkCategorie`) REFERENCES `tb_categorie` (`idCategorie`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- INSERTION DE  DONNES DE DANS LA TABLE tb_composant
--
INSERT INTO `tb_composant` (`idComposant`,`nomComposant`,`prixComposant`,`fkCategorie`) VALUES 
 (1,'SATA - 160 Go, 8 Mo, S-ATA/II, 7200 trs/min',48.99,1),
 (2,'SATA - 80 Go, 8 Mo, S-ATA/II, 7200 trs/min',38.52,1),
 (3,'SATA - 400 Go, 16 Mo, S-ATA/II, 7200 trs/min',154.25,1),
 (4,'IDE - 160 Go, 8 Mo',59,1),
 (5,'IDE - 320 Go, 8 Mo',72.5,1),
 (6,'IDE - 400 Go, 16 Mo',150,1),
 (7,'1024 Mo, PC3200 (400 MHz)',60.42,2),
 (8,'512 Mo, PC133',54.12,2),
 (9,'2048 Mo, PC4200 (533 MHz)',118.99,2),
 (10,'512 Mo, PC3200 (400 MHz)',32.75,2),
 (11,'256 Mo, PC133',22.15,2),
 (12,'512 Mo, PC4200 (533 MHz)',25.89,2),
 (13,'Radeon X1600 Pro, PCI-Express 16x, 256 Mo',124.52,3),
 (14,'GeForce 7600 GS, PCI-Express 16x, 256 Mo',98,3),
 (15,'GeForce 7800 GS, AGP 8x, 256 Mo',300.41,3),
 (16,'Radeon X1950 Pro, PCI-Express 16x, 256 Mo',174.98,3),
 (17,'Quadro FX 3500, PCI-Express 16x, 256 Mo',1200.58,3),
 (18,'GeForce 7300 GS, PCI-Express 16x, 256 Mo',70.25,3),
 (19,'2,67 GHz, 256 Ko, 533 MHz',35,4),
 (20,'3,00 GHz, 4 Mo, 800 MHz',125.36,4),
 (21,'1,86 GHz, 4 Mo, 1066 MHz',41.73,4);
INSERT INTO `tb_composant` (`idComposant`,`nomComposant`,`prixComposant`,`fkCategorie`) VALUES 
 (22,'3,33 GHz, 512 Ko, 533 MHz',60.81,4),
 (23,'2,00 GHz, 2 Mo, 800 MHz',132.84,4),
 (24,'2,93 GHz, 4 Mo, 1066 MHz',978.68,4),
 (25,'VIA PT880 Ultra',31.69,5),
 (26,'NVIDIA nForce Dual PCI-E x 16',254.94,5),
 (27,'Intel P965',154,5),
 (28,'NVIDIA nForce 680i SLI',500.84,5),
 (29,'Intel 946GZ Express',85.24,5),
 (30,'Intel 975X',100,5),
 (31,'GRAVEUR DVD - S-ATA, noir',50,6),
 (32,'GRAVEUR DVD - USB 2.0, aluminium',125.41,6),
 (33,'LECTEUR DVD - BLANC',19.99,6),
 (34,'LECTEUR DVD - NOIR',19.99,6),
 (35,'GRAVEUR DVD - IDE Noir',45,6),
 (36,'GRAVEUR DVD - IDE Beige',54.26,6),
 (37,'Digital-B - 480 w',52,7),
 (38,'NSK6000 - 380 w',98,7),
 (39,'P160 - 430 w',114.83,7),
 (40,'Vague 8609B - 500 w',81.23,7),
 (41,'Nine Hundred - 400 w',100.14,7),
 (42,'Oxygen 8611B',95.24,7);
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:DataGrid id="grilleComposants" x="10" y="10" width="700" rowCount="10">
        
         <mx:columns>
        <mx:DataGridColumn headerText="Catgorie" dataField="nomCategorie" width="200"/>
        <mx:DataGridColumn headerText="Composant" dataField="nomComposant" width="400"/>
        <mx:DataGridColumn headerText="Prix" dataField="prixComposant" width="100"/>
        </mx:columns>
       
</mx:DataGrid>

</mx:Application>
<?php

	    // Connexion  la base de donnes MySQL grce au nom dhte, au login et au mot de passe
	    $db = mysql_connect("localhost","root","mysql");
	
	    // Slection de la base de donnes
	    mysql_select_db("db_configurateur", $db);
	
	    // Requte
	    $Requete = "select CP.idComposant, CP.nomComposant, CP.prixComposant, CAT.nomCategorie, CAT.idCategorie
	                      From tb_composant CP, tb_categorie CAT
	                      where CP.fkCategorie = CAT.idCategorie";
	
	    // Rsultat de la requte
    $Resultat = mysql_query( $Requete );

    // Transformation du rsultat en XML
    $ExportXML = "<composants>";

    while ($Composants = mysql_fetch_object ($Resultat))
        {
        $ExportXML .="<composant>";
        $ExportXML .="<idComposant>".$Composants->idComposant."</idComposant>";
        $ExportXML .="<nomComposant>".$Composants->nomComposant."</nomComposant>";
        $ExportXML .="<prixComposant>".$Composants->prixComposant."</prixComposant>";
        $ExportXML .="<idCategorie>".$Composants->idCategorie."</idCategorie>";
        $ExportXML .="<nomCategorie>".$Composants->nomCategorie."</nomCategorie>";
        $ExportXML .="</composant>";
        }

    $ExportXML .= "</composants>";
    mysql_free_result($Resultat);
    print ($ExportXML)
?>
// Importation des classes ncessaires
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;

// Procdure dclenche  la fin de la cration de lapplication
public function listerComposants():void{

	var serviceHttp:HTTPService = new HTTPService;
	
	// Spcification de lURL
	serviceHttp.url = "http://localhost/PHP/httpServices/listerProduits.php"
	
	// Spcification du format des donnes reues
	serviceHttp.resultFormat = "e4x";
	
	// Type de mthode denvoi des donnes
	serviceHttp.method = "POST";
	
	// Procdure  excuter en cas de succs
	serviceHttp.addEventListener(ResultEvent.RESULT,resultatOk)
		
	// Procdure a excuter en cas derreur
	serviceHttp.addEventListener(FaultEvent.FAULT,resultatKo)
	
	// Excution du service
	serviceHttp.send()
	
}

// Procdure excute en cas de rception du rsultat
public function resultatOk(e:ResultEvent):void
{

	// Rcupration du rsultat
	var resultatXML:XML = e.result as XML;
	
	// Alimentation du dataProvider du DataGrid
	grilleComposants.dataProvider = resultatXML.composant;
	
}

// Procdure excute en cas derreur
public function resultatKo(e:FaultEvent):void
{
	
// Message derreur
	Alert.show("Erreur !");
}
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="listerComposants()">

<mx:Script source="httpService.as"></mx:Script>
<?php

class servComposants
{

    function servComposants ()
    {

	    /******************************************
	    /*            LISTE DES SERVICES          *
	    /******************************************/
        $this->methodTable = array(
            "serviceListerComposants" => array(
                "description" => "Liste des composants",
                "access" => "remote"
            )
        );
    }

	//--------------------------
	//--       SERVICE        --
	//--------------------------
    function serviceListerComposants ()
	{
	
	        // Connexion  la base de donnes MySQL grce au nom dhte, au login et au mot de passe
	        $db = mysql_connect("localhost","root","mysql");
	
	        // Slection de la base de donnes
	        mysql_select_db("db_configurateur", $db);
	
	        // Requte
	        $Requete = "select CP.idComposant, CP.nomComposant, CP.prixComposant, CAT.nomCategorie, CAT.idCategorie
	                        From tb_composant CP, tb_categorie CAT
	                        where CP.fkCategorie = CAT.idCategorie";
	
	        // Rsultat de la requte
        $Resultat = mysql_query( $Requete );
	
	        // Alimentation dun tableau avec la liste des composants
	        while ($Composant = mysql_fetch_object ($Resultat))
        {
        $tableauComposants[] = $Composant;
        }
	
	        // Envoi du tableau
         return( $tableauComposants);
    }
		
}
?>
function servComposants ()
    {

	    /******************************************
	    /*            LISTE DES SERVICES          *
	    /******************************************/
        $this->methodTable = array(
            "serviceListerComposants" => array(
                "description" => "Liste des composants",
                "access" => "remote"
            )
        );
    }
function serviceListerComposants ()
	{
	
	    []
	    
	    // Alimentation dun tableau avec la liste des composants
	    while ($Composant = mysql_fetch_object ($Resultat))
    {
        $tableauComposants[] = $Composant;
    }
	
	    // Envoi du tableau
    return( $tableauComposants);
}
<mx:RemoteObject id="servRO"
	source="ServComposants" endpoint="http://localhost/amfphp/gateway.php" destination="amfphp" showBusyCursor="true">
	<mx:method name="serviceListerComposants" result="resultatOK(event)" fault="resultatKO(event)"></mx:method>
</mx:RemoteObject>
<mx:Button x="10" y="242" label="Appeler service" id="btn_ro" click="executerService()"/>
<mx:Script>

	    <![CDATA[
	        import mx.rpc.events.FaultEvent;
	        import mx.rpc.events.ResultEvent;
	        import mx.controls.Alert;
	
	        public function executerService():void
	        {
	            servRO.getOperation('serviceListerComposants').send();
	        }
	
	
	        public function resultatOK(e:ResultEvent):void
	        {
	            grilleComposants.dataProvider = e.result as Array;
	        }
	
	
	        public function resultatKO(e:FaultEvent):void
	        {
	            Alert.show(e.fault.faultString, e.fault.faultCode.toString());
	        }
	
	    ]]>

</mx:Script>
	public function executerService():void
	    {
	        var servRO:RemoteObject = new RemoteObject;
	        // Paramtrage
	        servRO.source = "ServComposants"
	        servRO.destination = "amfphp"
	        servRO.endpoint = "http://localhost/amfphp/gateway.php"
	        // vnements si succs ou erreur
	        servRO.serviceListerComposants.addEventListener("result", resultatOK);
	        servRO.serviceListerComposants.addEventListener("fault", resultatKO)
	        // Excution de la mthode
	        servRO.serviceListerComposants()

	    }
servRO.serviceListerComposants(parametre1, parametre2)
